#include "Inf_Ads1115.h"

/// @brief 配置ads1115寄存器
/// @param  
static void Inf_ADS1115_SetRegister(void){
    uint16_t CR=0X8583;//配置寄存器默认值
   /*  Driver_I2C_Start();
    Driver_I2C_WriteAddr(DEV_ADDR_W);
    Driver_I2C_WriteByte(ConfigRegisterADDR);//选择对配置寄存器写操作 
    */
    CR|=OS;//开始单次转换--只转换一个开启的通道
    //开启转换通道0单线模式MUX=100
    CR|=MUX_2;
    CR&=~(MUX_1|MUX_0);
    //增益放大器配置 为-4.096~4.096 PGA=001
    CR&=~(PGA_2|PGA_1);
    CR|=PGA_0;
    //连续转换模式 MOD=0-----循环转换开启的通道
    CR&=~MODE;
    /* //先发高八位
    Driver_I2C_WriteByte(CR>>8);
    //再发低八位
    Driver_I2C_WriteByte(CR&0x0f);
    Driver_I2C_WriteStop(); */
    uint8_t data[3] = {
     ConfigRegisterADDR,
     (CR >> 8) & 0xff,
     CR & 0xff};
    HAL_I2C_Master_Transmit(&hi2c2,DEV_ADDR_W,data,3,1000);
}

void Inf_ADS1115_Init(void)
{
    
    Inf_ADS1115_SetRegister();
}

double Inf_ADS1115_GetV(void)
{
    /* uint16_t data=0;
    Driver_I2C_Start();
    Driver_I2C_WriteAddr(DEV_ADDR_W);
    Driver_I2C_WriteByte(ConversionRegisterADDR);//选择转换寄存器
    Driver_I2C_WriteStop();//结束写操作
    
    Driver_I2C_Start();
    Driver_I2C_WriteAddr(DEV_ADDR_R);//开始读操作
    //先读高八位数据
    data|=Driver_I2C_ReadByte();
    data<<=8;
    Driver_I2C_Ack();//发送应答
    //再读低八位数据
    data|=Driver_I2C_ReadByte();
    Driver_I2C_Ack();//发送应答
    Driver_I2C_ReadStop();//结束读操作 */
    uint8_t data1 = ConversionRegisterADDR;
    uint8_t rData[2] = {0};
    HAL_I2C_Master_Transmit(&hi2c2, DEV_ADDR_W, &data1, 1, 1000);
     HAL_I2C_Master_Receive(&hi2c2, DEV_ADDR_R, rData, 2, 1000);
     int16_t tmp = 0;
     tmp |= (rData[0] << 8);
     tmp |= rData[1];

    /* 通过量化把数字信号转换为电压值 */
    /* 16位数据除去符号位为15位二进制数 量化间隔为32766*/
    double v=tmp*4.096/32766;
    return v;
}
